#include "pileRationnels.h"

void pileRationnels::addX(const QString c){
    if(c == "/"){
        if(sl == false){
            sl = true; // voire peut etre bloquer le bouton virgule
            pA->setText(getQStringX());
        }
    }
    else if(c == "-"){
        negatif = !negatif;
        pA->setText(getQStringX());
    }
    else{
        if (sl == false && (p*10+c.toInt()) < MAX){
            p = p*10+c.toInt();
        }
        else if(sl == true &&(q*10+c.toInt()) < MAX){
            q = q*10+c.toInt();
        }
        QString s = getQStringX();
        pA->setText(s);
    }
}

void pileRationnels::iniX(){
    sl=false;
    negatif = false;
    p = 0;
    q = 0;
    updateAfficheur();
}

Rationnel pileRationnels::getX()const{
    Rationnel r;
    if (q == 0)
        r.set(p,1);
    else
        r.set(p,q);
    if(negatif) return -1*r;
    else return r;
}

QString pileRationnels::getQStringX()const{
    char s1[50];
    if (q == 0 && sl == true)
        sprintf_s(s1,"%d/",p);
    else if (q == 0 && sl == false)
        sprintf_s(s1,"%d",p);
    else
        sprintf_s(s1,"%d/%d",p,q);
    QString *s = new QString();
    if(negatif) *s="-"+QString().fromAscii(s1);
    else *s=QString().fromAscii(s1);
    return *s;
}

void pileRationnels::updateAfficheur()const{
    // met a jour l'afficheur pour la pile
    QString h = "";
    QStack<Rationnel>::const_iterator i;
    for (i = begin(); i != end(); ++i)
        h += i->toQString() + "\n";
    aPile->setText(h);
}

void pileRationnels::back(){
    if (sl == false)
        p /= 10;
    else
        q /= 10;
    pA->setText(getQStringX());
}

void pileRationnels::sauvegarder()const{
    QSettings settings("mesOptions.ini", QSettings::IniFormat);
    int taille = this->size();
    settings.beginGroup("PileRationnels");
    settings.setValue("taille", taille);
    settings.beginWriteArray("Valeur");
    const Rationnel *data = this->data();
    for(int i=0; i!=taille; i++){
       settings.setArrayIndex(i);
       settings.setValue("Rationnel", data[i].toQString("\\"));
   }
    settings.endArray();
    settings.endGroup();

}
